package com.pwl.springBoot.modules.test.dao;

import com.pwl.springBoot.modules.common.vo.Search;
import com.pwl.springBoot.modules.test.entity.City;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * CityDao
 */
@Repository
@Mapper
public interface CityDao {

    @Insert("insert into test_city (city_name, local_city_name, country_id, district, population, date_modified, date_created) values" +
            "(#{cityName}, #{localCityName}, #{countryId}, #{district}, #{population}, #{dateModified}, #{dateCreated})")
    @Options(useGeneratedKeys = true, keyProperty = "cityId", keyColumn = "city_id")
    void insertCity(City city);

    @Select("select * from test_city where city_name = #{cityName}")
    City getCityByCityName(String cityName);

    @Update("update test_city set city_name = #{cityName}, local_city_name = #{localCityName}, " +
            "date_modified = #{dateModified} where city_id = #{cityId}")
    void updateCity(City city);

    @Delete("delete from test_city where city_id = #{cityId}")
    void deleteCityByCityId(int cityId);

    @Select("select * from test_city where city_id = #{cityId}")
    City getCityByCityId(int cityId);

    @Select("select * from test_city where country_id = #{countryId}")
    List<City> getCitiesByCountryId(int countryId);

    @Select("<script>"
            + "select * from test_city"
            + "<where>"
            + "<if test ='keyword != \"\" and keyword != null'>"
            + "and ( city_name like '%${keyword}%' or local_city_name like '%${keyword}%')"
            + "</if>"
            + "</where>"
            + "<choose>"
            + "<when test ='sort != null and sort != \"\"'>"
            + "order by ${sort} ${direction}"
            + "</when>"
            + "<otherwise>"
            + "order by city_id desc"
            + "</otherwise>"
            + "</choose>"
            + "</script>")
    List<City> getCitiesBySearch(Search search);

    @Insert("<script>" +
            "insert into test_city (city_name, local_city_name, country_id, district," +
            "population, date_modified, date_created) values" +
            "<foreach collection='cities' item='city' index='index' separator=','>" +
            "(#{city.cityName}, #{city.localCityName}, #{city.countryId}, " +
            "#{city.district}, #{city.population}, #{city.dateModified}, #{city.dateCreated})" +
            "</foreach>" +
            "</script>")
    @Options(useGeneratedKeys = true, keyColumn = "city_id", keyProperty = "cityId")
    void insertBatchCities(@Param("cities") List<City> cities);

}
